《开(🎾)源精选》是我们分(💮)享Github、(📦)Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有(⭕)趣的内(🦊)容。本期推荐的是一个支持(🧗)2D、3D的游戏与应用开发的的小游戏引擎——LayaAir。
支持WebGL 1.0与2.0 自适(👔)应。支(🚰)持ActionScript3、TypeScript、JavaScript三种(🌔)开发语言,适用2D、3D产品研发。性能媲美原生APP,一次开发HTML5、APP(安卓与iOS)、小游戏(微信小游戏、QQ小游戏、百度小游戏、支付宝小(🤤)游戏、BiliBili小游戏、字节跳动小游戏、小米快游戏、OPPO小游戏、vivo小游戏、华为(🙍)快游戏、等(🎄))各个平台同时发布。
LayaAir引擎主要包括 引擎库 与 LayaAir IDE 两大核心部分。
LayaAir2.0引擎库功能
LayaAir2.0引擎不仅(🔫)保持了1.0的原有功(👪)能,比如:精灵、矢量图、文本、富文本、位图(👤)字体、动画、骨骼、音频与视频、滤镜(📰)、事件、(🎎)加载、缓动、时间、网络(🥐)、UI系统、(🕳)物理系统、TiledMap、prtocol等API;还新增内置了box2D物理引擎、组件化支持,以及150多款3D功能,比如:新增的主要官方材质包括PBRStandardMaterial、PBRSpecularMaterial以及UnlitMaterial材质等。纹理方面,增加多(✈)种纹理参数配置(mipmap、format、wrapModeU、wrapModeV、filterMode、anisoLevel), 增加纹理上传像素接口, GPU纹理压缩。动画方面(🛬),新增Animator动画融合功能crossFade,新增动画多层混合播放,动画更新机制调整为实时插值,大幅减少内存和动画流畅度表现,新增多种材质属性动画支持开发2D、3D产品研发(👀),支持同时发布为(🦃)Web(浏览器、webView)、Native APP(IOS、(🌰)安卓)、小游戏(微信、手Q、百度(🥁)、头条、抖音、小米、OPPO、vivo、华为)、等多(🕙)种(🏬)版本。LayaAir2.0 IDE功能
LayaAir2.0 IDE主要包括项目管理、代码开发编辑器、可视化编辑器、第三方工具链支持工具等。其中主要功能包括:
代码开发UI与场景编辑器场景管理(2.0新增)粒子编辑器动画编辑器物理编辑器(2.0新增)组件化支持(2.0新增)(⬅)3D支持(2.0新增)LayaCloud项目(🚙)支持(2.0新增)脚本扩(❄)展预设APP打包JS混淆与压缩第三方工具链转换工具(Unity3D、(👶)TiledMap、Spine、龙(✒)骨……)Laya2.0 IDE 兼容LayaAir 1.x版本的写法,在2d项目中,可以不需要太大的改动即可把原有项目升级到2.0引擎(升级(🏩)前建议备份)
Laya2.0 IDE 采用(🏯)挂载组件脚本与场景管理的(🌯)方(〽)式进行开发,在ide中编辑场景与页面组件,通过添加脚本的(🦀)方式,使项目开发更利于程序,美术,策划的协同(🥨)工作,并且对初次接触Laya的开发者,更易于上手,开发方式更友好。
开发语言由于LayaAir引擎支持(😒)ActionScript3(AS3)、TypeScript(TS)、JavaScript(JS)三种语言开发,到底用哪种语言更好(🦋)呢?常(🧀)常困惑着刚接触引擎的新手(📱)们。这里简单介绍一下。
关于JS语言
需要大家注意的是JS语言虽然上手更为容易,但是(🔨)作为一弱类型语言,开发与调试(🎻)的(📷)难度,以及大型项目的管理与(🍔)多人协作等方面,都不如TS与AS3这种可以在IDE中检测(🀄)类型和语法语言。当代码越来越多的时候,JS一旦不小心写错,IDE中并不会有任何提示,只有在运行的时候才会发现问题,经常有开发者为了查一个(🤬)小小的失误,花费大量的时间成本。所以虽然支(💰)持JS语言开发,但并不建议采用该语言作为中型或大型项(😱)目(😻)的开发。
关于TS语言
TS语言是LayaAir引擎官方推荐的开发语言,也是自2.2引擎开始,LayaAir引擎源码所使用的语言。在官方的2.0引擎视频教学中,也会仅采(⛳)用TS语言进行教学。
关于AS语言
AS语(🤠)言是LayaAir 2.2版本之前的引擎源码语言,AS3语言曾经是页游时代的霸主,但自从Adobe正式宣布放弃Flash之后,也代表着该语言也将步入无人维护的境地。那一些新的语言特性自然难以支持(🗾),毫无疑问,继续使用该语言(💜)将会拖引擎的后腿(👏)。所以,LayaAir引擎源码语言进行了变更,但2.X版引擎,AS语言版本仍会保持兼容及维护。但未来3.x一定会放弃该语言的支持。所以建议开发者(👔)在创建新项目的时候不要使用AS语言。
代码示例ActionScript
package LayaAir3D_Scene3D { import common.CameraMoveScript; import laya.d3.core.Camera; import laya.d3.core.scene.Scene3D; import laya.d3.math.Vector3; import laya.d3.math.Vector4; import laya.display.Stage; import laya.utils.Handler; import laya.utils.Stat; public class SceneLoad1 { public function SceneLoad1() { //初始(🎥)化引擎 Laya3D.init(0, 0); Stat.show(); Laya.stage.scaleMode = Stage.SCALE_FULL; Laya.stage.screenMode = Stage.SCREEN_NONE; //加载场景 Scene3D.load("res/threeDimen/scene/LayaScene_dudeScene/Conventional/dudeScene.ls", Handler.create(this, function(scene:Scene3D):void { Laya.stage.addChild(scene) as Scene3D; //获取场景中的相机 var camera:Camera = scene.getChildByName("Camera") as Camera; //移动摄像机位置 camera.transform.position = new Vector3(0, 0.81, -1.85); //旋转(🕗)摄像机角度 camera.transform.rotate(new Vector3(0, 0, 0), true, false); //设置摄像机视野范围(🚻)(角度) camera.fieldOfView = 60; //设置背景颜色 camera.clearColor = new Vector4(0, 0, 0.6, 1); //加入摄像机移(🐖)动控制脚本(💊) camera.addComponent(CameraMoveScript); //设置灯光环境色 //scene.ambientColor = new Vector3(2.5, 0, 0); })); } }}
JavaScript
class SceneLoad1{ constructor(){ Laya3D.init(0, 0); Laya.Stat.show(); Laya.stage.scaleMode = Laya.Stage.SCALE_FULL; Laya.stage.screenMode = Laya.Stage.SCREEN_NONE; Laya.Scene3D.load("res/threeDimen/scene/LayaScene_dudeScene/Conventional/dudeScene.ls", Laya.Handler.create(this, this.sceneLoadFinished)); } sceneLoadFinished(scene){ Laya.stage.addChild(scene); let camera = scene.getChildByName("Camera"); camera.addComponent(CameraMoveScript); }}//激活启动类new SceneLoad1();
TypeScript
import CameraMoveScript from "./common/CameraMoveScript"class SceneLoad1 { constructor() { Laya3D.init(0, 0); Laya.Stat.show(); Laya.stage.scaleMode = Laya.Stage.SCALE_FULL; Laya.stage.screenMode = Laya.Stage.SCREEN_NONE; Laya.Scene3D.load("res/threeDimen/scene/LayaScene_dudeScene/Conventional/dudeScene.ls", Laya.Handler.create(null, function(scene:Laya.Scene3D):void { Laya.stage.addChild(scene) as Laya.Scene3D; var camera:Laya.Camera = scene.getChildByName("Camera") as Laya.Camera; camera.addComponent(CameraMoveScript); })); }}new SceneLoad1;引擎示例
—END—
开源协议:https://gitee.com/layabox/LayaAir/blob/master/LICENSE.md
开源(👐)地址:https://gitee.com/layabox/LayaAir